package com.myf.mappers;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.myf.dtos.user.UserQueryOutput;
import com.myf.entities.UserEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
import java.util.Optional;

@Mapper
public interface UserMapper extends BaseMapper<UserEntity> {
    List<UserEntity> findAll();

    /**
     * 分页查询数据
     * @param map 查询对象
     *       <ul>
     *         <li>keyword - 关键字</li>
     *         <li>limit - 分页</li>
     *         <li>offset - 跳行</li>
     *       </ul>
     * */
    List<UserQueryOutput> getPaginationList(Map<String, Object> map);

    /**
     * 分页查询数据
     * @param map 查询对象
     *       <ul>
     *         <li>keyword - 关键字</li>
     *       </ul>
     * */
    int getPaginationCount(Map<String, Object> map);

    /**
     * 查询出用户信息
     *
     * @param account 账号
     * @param password 加密后的密码
     * @return 查询出的用户
     */
    Optional<UserEntity> getByCredential(@Param("account") String account,@Param("password") String password);



//    SET
//    last_login_ip = #{lastLoginIP},
//    last_login_time = #{lastLoginTime},
//    last_update_at = #{lastUpdateAt,typeHandler=com.myf.typeHandlers.ZonedDateTimeTypeHandler},
//    last_update_by = #{lastUpdateBy,typeHandler=com.myf.typeHandlers.ZonedDateTimeTypeHandler},
//    row_version = row_version + 1

    /**
    * @param map 查询对象
    *             <ul>
    *               <li>id - 用户id</li>
    *               <li>profile - 每页数量</li>
    *               <li>lastLoginIP - 最后登录ip</li>
    *               <li>lastLoginAt - 最后登录时间</li>
    *               <li>updateBy - 最后更新人</li>
    *               <li>updateAt - 最后更新时间</li>
    *             </ul>
    * @return 影响的行数
    */
    int updateLastLogin(Map<String, Object> map);

    /**
     * @param map
     *             <ul>
     *               <li>ids - 用户id集合</li>
     *               <li>deleteBy - 最后删除人</li>
     *               <li>deleteAt - 最后删除时间</li>
     *             </ul>
     * @return 影响的行数
     */
    int removeByIds(Map<String, Object> map);

    /**
     * @param map
     *             <ul>
     *               <li>id- 用户id</li>
     *               <li>account - 账号</li>
     *             </ul>
     * @return int
     */
    int isAccountExists(Map<String, Object> map);


    /**
     * @param map 更新密码
     *             <ul>
     *               <li>id - 用户id</li>
     *               <li>password - 密码</li>
     *               <li>updateBy - 最后更新人</li>
     *               <li>updateAt - 最后更新时间</li>
     *             </ul>
     * @return 影响的行数
     */
    int updatePassword(Map<String, Object> map);
}
